/*
 * 入口文件
 */
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import cookie from 'js-cookie'

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

// 全局函数及变量
import Global from './Global';
Vue.use(Global);

import Axios from 'axios';
// Vue.prototype.$axios = Axios;
Axios.defaults.baseURL = '/api'
// 全局请求拦截器
Axios.interceptors.request.use(
  config => {
    // 为请求头对象，添加token
    config.headers.token = cookie.get('token')
    return config;
  },
  error => {
    // 跳转error页面
    router.push({ path: "/error" });
    return Promise.reject(error);
  }
);
// 全局拦截器,在进入需要用户权限的页面前校验是否已经登录
router.beforeResolve( async (to, from, next) => {
  // console.log("store.state.isLogin",store.state.user)
  const loginUser = cookie.get("user") ? true:false;
  // const loginUser = store.state.user.username ? true:false;
  // 判断路由是否设置相应校验用户权限
  if (to.meta.requireAuth) {
    if (!loginUser) {
      // 没有登录，显示登录组件
      // this.setShowLogin(true);
      store.dispatch("setShowLogin", true);
      if (from.name == null) {
        //此时，是在页面没有加载，直接在地址栏输入链接，进入需要登录验证的页面
        next("/");
        return;
      }
     
      // if(store.state.shopcarNumber)
      // 终止导航
      next(false);
      return;
    }
    if(!store.state.shopcarNumber){
      const { data: res } = await Axios.get("/xuanmall/cart/list");
        if (res.code === 0) {
          console.log("购物车", res);
          store.dispatch("setShopcarNumber", res.cartVOS.length);
          cookie.set("shopcarNumber", res.cartVOS.length, { domain: "localhost" });
        }
    }
  }
  next();
});
// 全局响应拦截器
Axios.interceptors.response.use(
  res => {
    if (res.code === "500") {
      // 500表示服务器异常
      // 跳转error页面
      router.push({ path: "/error" });
    }
    return res;
  },
  error => {
    // 跳转error页面
    router.push({ path: "/error" });
    return Promise.reject(error);
  }
);
// 挂在到Vue实例，后面可通过this调用
Vue.prototype.$http = Axios


// 相对时间过滤器,把时间戳转换成时间
// 格式: 2022-02-25 21:43:23
Vue.filter('dateFormat', (dataStr) => {
  var now = new Date(dataStr);
  // formatDate(now) {
    var year = now.getFullYear(); //取得4位数的年份
    var month = now.getMonth() + 1; //取得日期中的月份，其中0表示1月，11表示12月
    var date = now.getDate(); //返回日期月份中的天数（1到31）
    var hour = now.getHours(); //返回日期中的小时数（0到23）
    var minute = now.getMinutes(); //返回日期中的分钟数（0到59）
    var second = now.getSeconds(); //返回日期中的秒数（0到59）
    return (year +"-" +month +"-" +date +" " +hour +":" +minute + ":" +second);
  // }

  // function timeAdd0 (str) {
  //   if (str < 10) {
  //     str = '0' + str;
  //   }
  //   return str;
  // }
  // var y = time.getFullYear();
  // var m = time.getMonth() + 1;
  // var d = time.getDate();
  // var h = time.getHours();
  // var mm = time.getMinutes();
  // var s = time.getSeconds();
  // return y + '-' + timeAdd0(m) + '-' + timeAdd0(d) + ' ' + timeAdd0(h) + ':' + timeAdd0(mm) + ':' + timeAdd0(s);
});

//全局组件
import MyMenu from './components/MyMenu';
Vue.component(MyMenu.name, MyMenu);
import MyList from './components/MyList';
Vue.component(MyList.name, MyList);
import MyLogin from './components/MyLogin';
Vue.component(MyLogin.name, MyLogin);
import MyRegister from './components/MyRegister';
Vue.component(MyRegister.name, MyRegister);

Vue.config.productionTip = false;

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
